//#include <stdio.h>
//typedef long long LL;
//typedef int (*arr)[10];
//typedef void (*Func)();
//int main()
//{
//   LL a;
//   printf("%lu",sizeof(a)); 
//   int b[5][10];
//   arr p=b; 
//   Func p2=test;
//   p2(); 
//    
//    
//    return 0;
// } 
//#include <stdio.h>
//#include <stdlib.h>
//#include <time.h>
//int *getRandData(int n)
//{
//   int *arr=(int*)malloc(n*sizeof(int));
//   int i=0;
//   for(i=0;i<n;i++) 
//   {
//       arr[i]=rand()%100;
//    } 
//   return arr; 
//}
//void output(int*arr,int n)
//{
//    int len=0;
//    int i=0;
//    for(i=0;i<n;i++)
//    {
//        len+=printf("%3d",i);
//    }
//    printf("\n");
//    for(i=0;i<len;i++)
//    {
//        printf("-");
//    }
//    printf("\n");
//    for(i=0;i<n;i++)
//    {
//        printf("%3d",arr[i]);
//    }
//    printf("\n\n");
//    
//}
////int camp(const void*p1,const void *p2)
////{
////    const int *a=(const int*)p1;
////    const int *b=(const int*)p2;
////    if(*a>*b)   return -1;
////    if(*a==*b)  return 0;
////    return 1;
////}
//int camp2(const void*p1,const void *p2)
//{
//    return  *((const int *)p2)-*((const int *)p1);
//}
//int main()
//{
//    srand(time(0));
//    int *arr=getRandData(10);
//    output(arr,10);
//    qsort(arr,10,sizeof(int),camp2);
//    output(arr,10);
//    
//    return 0;
//}
//#include <stdio.h>
//#include <math.h>
//typedef double (*FUNC_T)(double);
//double f1(double x)
//{
//    return x*x;
//}
//double f2(double x)
//{
//    return 3*x*x+3*x-5;
//}
//double f3(double x)
//{
//    return pow(1.2,x);
//}
//double binary_search(FUNC_T func,double y)
//{
//    double l=0,r=1000,mid;
//    while(r-l>0.0000001)
//    {
//        mid=(l+r)/2.0;
//        if(func(mid)<y) 
//        l=mid;
//        else
//        r=mid;
//    }
//    return l;
//}
//int main()
//{
//     double y;
//     while(scanf("%lf",&y)!=EOF)
//     {
//         double x1=binary_search(f1,y);
//         double x2=binary_search(f2,y);
//         double x3=binary_search(f3,y);
//         printf("x1=%lf,fl(%lf)=%lf\n",x1,x1,f1(x1));
//         printf("x2=%lf,f2(%lf)=%lf\n",x2,x2,f2(x2));
//         printf("x3=%lf,f3(%lf)=%lf\n",x3,x3,f3(x3));
//     }
//     
//     
//     return 0;
// }

//#include <stdio.h>
//typedef double (*FUNC_T)(double);
//double min(double a,double b)
//{
//    if(a<b) return a;
//    else 
//    return b;
//}
//double f(double x)
//{
//    double y=0;
//    y+=min(x,3000)*0.03;
//    if(x>3000)
//    y+=(min(x,12000)-3000)*0.1;
//    if(x>12000)
//    y+=(min(x,25000)-12000)*0.2;
//    if(x>25000)
//    y+=(min(x,35000)-25000)*0.25;
//    if(x>35000)
//    y+=(min(x,55000)-35000)*0.3;
//    if(x>55000)
//    y+=(min(x,80000)-55000)*0.;
//    if(x>80000)
//    y+=(x-80000)*0.45;
//    return x-y;
//}
//
//double binary_search(FUNC_T func,double y)
//{
//    double l=0,r=2*y,mid ;
//    while(r-l>1e-6)
//    {
//        mid=(l+r)/2.0;
//        if(func(mid)<y)
//        l=mid;
//        else
//        r=mid;
//    }
//    return l;
//}
//int main()
//{
//    double y;
//    while(scanf("%lf",&y)!=EOF)
//    {
//        printf("f(%.2lf)=%lf",binary_search(f,y),y);
//    }
//    return 0;
//}


//#include <stdio.h>
//#include <stdlib.h>
//viod quick_sort(int *arr,int l,int r)
//{
//    if(r-l<=2){
//        if(r-l<=1)
//        return ;
//        if(arr[l]>rr[l+1])
//        swap(arr[l],arr[l+1]);
//        return ;
//    }
//    int x=l,y=r-l,z==arr[l];
//    while(x<y)
//    {
//        while(x<y&&z<=arr[y])
//        --y;
//        if(x<y)
//        arr[x++]=arr[y];
//        while(x<y&&z>=arr[y])
//        ++x;
//        if(x<y)
//        arr[y--]=arr[x];
//    }
//    arr[x]=z;
//    quick_sort(arr,l,x);
//    quick_sort(arr,x+1,r);
//}
//int main()
//{
//    int *arr_s=getRandData(SMALL_DATA_N);
//    int *arr_b=getRandData(BIG_DATA_N);
//    
//    return 0;
//}
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void my_qsort(void*arr,size_t count,size_t sizeof,int (*camp)(const void*,const void*))
{
    if(r-l<=1)  return ;
    int x=1,y=r-1,z=arr[l];
    do{ 
    while(arr[x]<z)
    ++x;
    while(z<arr[y])
    --y;
    if(x<=y){
        swap(arr[x],arr[y]);
        x++;
        y--;
    }
    }while(x<=y);
    quick_sort(arr,l,y+1);
    quick_sort(arr,x,r);
}
void output(int*arr,int n)
{
    int len=0;
    int i=0;
    for(i=0;i<n;i++)
    {
        len+=printf("%3d",i);
    }
    printf("\n");
    for(i=0;i<len;i++)
    {
        printf("-");
    }
    printf("\n");
    for(i=0;i<n;i++)
    {
        printf("%3d",arr[i]);
    }
    printf("\n\n");
    
}
int camp(const void*p1,const void *p2)
{
    const int *a=(const int*)p1;
    const int *b=(const int*)p2;
    if(*a>*b)   return -1;
    if(*a==*b)  return 0;
    return 1;
}
int camp2(const void*p1,const void *p2)
{
    return  *((const int *)p2)-*((const int *)p1);
}
int main()
{
    srand(time(0));
    int *arr=getRandData(10);
    output(arr,10);
    qsort(arr,10,sizeof(int),camp2);
    output(arr,10);
    
    return 0;
}




































